# -*-coding: Utf-8 -*-
# @File : admin_interface .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2023/6/12
'''
管理员接口
'''
from db import db_hander, models
from lib import common
from interface import common_interface
from conf import settings

logger_admin = settings.get_logger('admin')

# 管理员注册接口
def admin_register_interface(username, password, salt):
    # (1) 判断用户是否存在
    # 调用Admin类中的，select方法，由类中的方法去调用db_hander中的select_data方法获取对象
    # 默认将Admin这个类传入
    admin_obj = models.Admin.select(username=username)

    # （1.1） 用户存在，则不允许注册，返回结果给用户视图层
    if admin_obj:
        flow = f'当前用户::{username}已存在,请确认信息!!'
        logger_admin.warning(flow)
        return False, flow

    # （1.2） 用户不存在，则允许注册，调用类实例化得到对象进行保存，返回结果给用户视图层
    admin_obj = models.Admin(username=username, password=password, salt=salt)
    # admin_obj调用save方法会将本身自己的对象传递给save方法
    admin_obj.save()

    flow = f'当前用户{username}注册成功!'
    logger_admin.info(flow)
    return True, flow


# 管理员登录接口
def admin_login_interface(username, password, login_input_code, login_random_code):
    flag, msg = common_interface.login_interface_roles(
        username=username,
        password=password,
        login_random_code=login_random_code,
        login_input_code=login_input_code,
        roles='admin')
    if flag:
        logger_admin.info(msg)
    else:
        logger_admin.warning(msg)
    return flag, msg


# 管理员创建学校功能接口
def admin_create_school_interface(login_username_admin, school_name, school_address):
    # （1） 查看当前学校是否已存在
    school_obj = models.School.select(school_name)

    # （2） 若学校存在，则返回False,并提示相关信息
    if school_obj:
        flow = f'当前学校{school_name}已存在!!'
        logger_admin.warning(flow)
        return False, flow

    # （3） 若学校不存在，则由登录的管理员进行学校注册
    admin_obj = models.Admin.select(login_username_admin)
    # (4) 由管理员来调用创建学校方法，并传入学校的名字与地址
    admin_obj.create_school(school_name, school_address)

    # （5） 返回状态和提示语
    flow = f'当前学校{school_name}创建成功!'
    logger_admin.info(flow)
    return True, flow


# 管理员创建课程接口
def admin_create_courses_interface(school_name, course_name, login_name_admin, course_timestamp, course_price):
    # (1) 查看课程是否存在
    # （1.1）先获取学校对象中的课程列表
    # 调用学校类中的查看数据方法（学校名字）
    school_obj = models.School.select(school_name)
    # （1.2）判断当前课程是否存在课程列表中
    if course_name in school_obj.courses_list:
        flow = f'当前课程{course_name}已存在!'
        logger_admin.warning(flow)
        return False, flow

    # (1.3) 若课程不存在，则由管理员创建课程
    admin_obj = models.Admin.select(login_name_admin)
    admin_obj.create_course(school_obj, course_name, course_timestamp, course_price)

    flow = f'当前课程{course_name}创建成功!!绑定给{school_name}校区!!'
    logger_admin.info(flow)
    return True, flow


# 管理员创建讲师接口
def admin_create_teacher_interface(teacher_name, login_name_admin, teacher_password='1314521'):
    '''

    :param teacher_name: 讲师姓名
    :param login_name_admin: 当前登录管理员姓名
    :param teacher_password: 默认讲师登录密码
    :return:
    '''
    # 1. 判断老师是否存在
    teacher_obj = models.Teacher.select(teacher_name)

    # (2):若存在则返回结果，不能创建

    if teacher_obj:
        flow = f'当前讲师{teacher_name}已存在!!'
        logger_admin.warning(flow)
        return False, flow

    # （3）若不存在，则让管理员开始创建讲师
    admin_obj = models.Admin.select(login_name_admin)
    teacher_salt = common.get_verify_code(6)
    teacher_password = common.encrypt_decrypt(teacher_salt + teacher_password)
    admin_obj.create_teacher(teacher_name, teacher_password, teacher_salt)

    flow = f'当前讲师{teacher_name}创建成功!!'
    logger_admin.info(flow)
    return True, flow
